#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    /* 查找可用的串口 */
    find_seralport();
}

MainWindow::~MainWindow()
{
    delete ui;
}


/* 查找可用的串口 */
void MainWindow::find_seralport()
{

    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        QSerialPort serial;
        serial.setPort(info);
        if(serial.open(QIODevice::ReadWrite))
        {
            ui->PortBox->addItem(serial.portName());
            serial.close();
        }
    }
}

/* 打开串口 */
void MainWindow::on_openPortBtn_clicked()
{
    if(ui->PortBox->isEnabled())
    {
        ui->openPortBtn->setText("关闭");		//按下“OpenPort”后，按键显示为“ClosePort”
        ui->PortBox->setDisabled(true);	//按下“OpenPort”后，禁止再修改COM口
        serial.setPortName(ui->PortBox->currentText());	//设置COM口
        serial.setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections);//设置波特率和读写方向
        serial.setDataBits(QSerialPort::Data8);		//数据位为8位
        serial.setFlowControl(QSerialPort::NoFlowControl);//无流控制
        serial.setParity(QSerialPort::NoParity);	//无校验位
        serial.setStopBits(QSerialPort::OneStop);	//一位停止位
        serial.close();					//先关串口，再打开，可以保证串口不被其它函数占用。
        if(serial.open(QIODevice::ReadWrite))		//以可读写的方式打开串口
        {
            connect(&serial,SIGNAL(readyRead()),this,SLOT(read_Com()));	//把串口的readyRead()信号绑定到read_Com()这个槽函数上
        }
//        ui->sendButton->setEnabled(true);
    } else {
        ui->openPortBtn->setText("打开");		//按下“ClosePort”后，按键显示为“OpenPort”
        ui->PortBox->setEnabled(true);		//按下“ClosePort”后，COM口可被修改
        serial.close();					//关串口
        //关闭发送按钮的使能
//        ui->sendButton->setEnabled(false);
    }
}


/* 手动添加的槽函数声明,用于读出串口缓冲区的内容 */
void MainWindow::read_Com()
{
    QByteArray buf;
    /* 信号到来，读取所有的字符串 */
    buf = serial.readAll();

    /* 如果真的有数据 */
    if(!buf.isEmpty())
    {
        QString str = ui->recvTextBrowser->toPlainText();
        str+=tr(buf);
        ui->recvTextBrowser->clear();
        ui->recvTextBrowser->append(str);
    }
    buf.clear();
}

/* 清空显示 */
void MainWindow::on_pushButton_6_clicked()
{
    ui->recvTextBrowser->clear();
}
